package com.browsesoft.user;

import java.util.Iterator;
import java.util.LinkedList;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.w3c.dom.Document;
import org.w3c.dom.Element;

import com.browsesoft.EntityManager;
import com.browsesoft.ExtendElement;
import com.browsesoft.Tools;
import com.browsesoft.htmlcomponent.HTMLBasicComponent;
import com.browsesoft.htmlcomponent.HTMLTableModel;

/**
 * 角色所属用户表格model
 */
public class UsersOfRoleTableModel implements HTMLTableModel {
	/**
	 * 所有用户列表
	 */
	private LinkedList users = new LinkedList();

	/**
	 * 父id
	 */
	private String parentID = null;

	/**
	 * 基本组件
	 */
	private HTMLBasicComponent component;

	/**
	 * 得到列数
	 * 
	 * @return 列数
	 */
	public int getColumnCount() {
		return 6;
	}

	/**
	 * 得到列的名称
	 * 
	 * @param index
	 *            列号
	 * @return 列的名称
	 */
	public String getColumnName(int index) {
		// 如果列数等于1
		if (index == 1) {
			if (this.component.getElement().hasAttribute("en")) {
				return "user name";
			} else {
				return "用户姓名";
			}
		} else {
			return "";
		}
	}

	/**
	 * 得到列的英文名
	 * 
	 * @param index
	 *            列号
	 * @return 列的英文名
	 */
	public String getColumnEname(int index) {
		return "";
	}

	public Object getDatas() {
		return null;
	}

	/**
	 * 得到行数
	 * 
	 * @return 行数
	 */
	public int getRowCount() {
		if (users != null) {
			return users.size();
		} else {
			return 0;
		}
	}

	/**
	 * 得到类型
	 * 
	 * @param col
	 *            列数
	 * @return 类型
	 */
	public String getType(int col) {
		String[] types = { "space", "checkbox", "image", "td", "delete",
				"space" };
		return types[col];
	}

	/**
	 * 设置条件
	 * 
	 * @param condition
	 *            条件
	 */
	public void setCondition(String condition) {
	}

	/**
	 * 修改单元值
	 * 
	 * @param td
	 *            元素
	 * @param doc
	 *            文档
	 * @param row
	 *            行数
	 * @param col
	 *            列数
	 */
	public void modifyCellValue(Element td, Document doc, int row, int col) {
		User user = (User) users.get(row);
		// 如果是第1列
		if (col == 1) {
			// 替换流程id号
			Element e = (Element) ExtendElement.findElements(td, "type",
					"checkbox").get(0);
			e.setAttribute("name", user.getID());
			String onclick = e.getAttribute("onclick");
			onclick = onclick.replaceAll("result", "resultdarpent_"
					+ this.component.getName());
			e.setAttribute("onclick", onclick);
		}
		// 否则,如果是第3列
		else if (col == 3) {
			ExtendElement.replaceElementContext(td, doc
					.createTextNode((String) user.getAttributes().get("name")));
		}
		// 否则,如果是第4列
		else if (col == 4) {
			Element e = (Element) ExtendElement.findElements(td, "type",
					"delete").get(0);
			String str = e.getAttribute("onclick");
			str = str.replaceFirst("userid", user.getID());
			e.setAttribute("onclick", str);
		}
	}

	/**
	 * 初始化
	 * 
	 * @param request
	 *            客户端请求
	 * @throws Exception
	 */
	public void init(HttpServletRequest request) throws Exception {
		if (this.parentID == null) {
			// 取得父ID
			this.parentID = request.getParameter("point");
		}
	}

	public boolean isNum(String str) {
		boolean isnum = true;
		for (int i = 0; i < str.length(); i++) {
			char c = str.charAt(i);
			if (c < '0' || c > '9') {
				isnum = false;
			}
		}
		return isnum;
	}

	/**
	 * 处理用户请求
	 * 
	 * @param request
	 *            客户端请求
	 * @param response
	 *            响应
	 * @throws Exception
	 */
	public void service(HttpServletRequest request, HttpServletResponse response)
			throws Exception {
		// 取得组下的所有的用户ID
		Role role = (Role) EntityManager.getInstance().getObject(this.parentID);
		// 根据选择的用户的id，找到用户列表
		String userIDs = request.getParameter("userid");
		if (userIDs != null && !userIDs.equals("")) {
			if (this.isNum(userIDs)) {
				role.addUser(Tools.stringToLinkedList(userIDs));
			}
		}
		// 如果是批量删除
		String action = request.getParameter("action");
		if (action != null && action.equals("deleteselected")) {
			// 得到选中的节点值
			String IDS = request.getParameter("resultdarpent_"
					+ this.component.getName());
			// 处理批量删除
			disposeMoreDelete(role, IDS);
		}
		// 取得要删除的用户id
		String deleteid = request.getParameter("deleteid");
		if (deleteid != null && !deleteid.equals("")) {
			User user = (User) EntityManager.getInstance().getObject(deleteid);
			role.remove(user);
		}
		// 取得用户列表
		users = role.getUsers();
	}

	/**
	 * 处理批量删除
	 * 
	 * @param component
	 */
	private void disposeMoreDelete(Role role, String ids) throws Exception {
		LinkedList temp = Tools.stringToLinkedList(ids);
		// 为了删除选中的每一个用户
		Iterator iter = temp.iterator();
		while (iter.hasNext()) {
			// 得到选中的对象
			Object obj = EntityManager.getInstance().getObject(
					(String) iter.next());
			// 如果是用户
			if (obj instanceof User) {
				// 删除
				role.remove((User) obj);
			}
		}
	}

	/**
	 * 设置模型所对应的组件
	 * 
	 * @param component
	 *            对应的组件
	 */
	public void setComponent(HTMLBasicComponent component) {
		this.component = component;
	}

	/**
	 * 更新页面元素
	 * 
	 * @param c
	 *            组件
	 * @throws Exception
	 */
	public void updatePageElement(HTMLBasicComponent c) throws Exception {
	}
}